//获取定位
import { Toast } from 'vant'

// 导出一个名为 getLocation 的常量，它是一个函数
export const getLocation = () => {
  // 返回一个新的 Promise 对象
  return new Promise((resolve, reject) => {
    // 检查浏览器是否支持地理位置功能
    if (navigator.geolocation) {
      // 调用 getCurrentPosition 方法获取当前地理位置
      navigator.geolocation.getCurrentPosition(
        (position) => {
          resolve([position.coords.longitude, position.coords.latitude]) // 在成功获取位置时传递 position
        },
        (error) => {
          // 调用现有的错误处理函数
          showError(error, (shouldContinue) => {
            if (!shouldContinue) {
              resolve(false) // 向外层传递数据
            }
          })
          reject(error) // 在发生错误时传递 error
        }
      )
    } else {
      reject(new Error('设备不支持地理定位'))
    }
  })
}

function showError(error, callback) {
  // 默认不继续后续操作
  let shouldContinue = false
  switch (error.code) {
    case error.PERMISSION_DENIED:
      console.log('User denied the request for Geolocation.')
      Toast({ type: 'fail', message: '用户拒绝了定位请求' })
      break
    case error.POSITION_UNAVAILABLE:
      console.log('Location information is unavailable.')
      Toast({ type: 'fail', message: '定位失败，请检查定位权限' })
      break
    case error.TIMEOUT:
      console.log('The request to get user location timed out.')
      Toast({ type: 'fail', message: '定位超时，请检查网络' })
      break
    case error.UNKNOWN_ERROR:
      console.log('An unknown error occurred.')
      Toast({ type: 'fail', message: '未知错误' })
      break
  }

  callback(shouldContinue)
}
